package org.jetbrains.rpc;

import com.intellij.openapi.util.ActionCallback;
import com.intellij.openapi.util.AsyncResult;
import com.intellij.util.Function;
import com.intellij.util.PairConsumer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jsonProtocol.Request;
import org.jetbrains.jsonProtocol.RequestWithResponse;

public abstract interface CommandSender<ERROR_DETAILS>
{
  public abstract ActionCallback send(Request paramRequest);
  
  public abstract <RESULT, TRANSFORMED_RESULT> AsyncResult<TRANSFORMED_RESULT> send(@NotNull RequestWithResponse paramRequestWithResponse, @NotNull Function<RESULT, TRANSFORMED_RESULT> paramFunction);
  
  public abstract <RESULT, TRANSFORMED_RESULT> AsyncResult<TRANSFORMED_RESULT> send(@NotNull RequestWithResponse paramRequestWithResponse, @NotNull Function<RESULT, TRANSFORMED_RESULT> paramFunction, @Nullable ErrorConsumer<AsyncResult<TRANSFORMED_RESULT>, ERROR_DETAILS> paramErrorConsumer);
  
  public abstract <RESULT, TRANSFORMED_RESULT> void send(@NotNull AsyncResult<TRANSFORMED_RESULT> paramAsyncResult, @NotNull RequestWithResponse paramRequestWithResponse, @NotNull Function<RESULT, TRANSFORMED_RESULT> paramFunction);
  
  public abstract <RESULT, MAIN_RESULT> AsyncResult<MAIN_RESULT> send(@NotNull AsyncResult<MAIN_RESULT> paramAsyncResult, @NotNull RequestWithResponse paramRequestWithResponse, @NotNull PairConsumer<RESULT, AsyncResult<MAIN_RESULT>> paramPairConsumer);
  
  public abstract <RESULT, MAIN_RESULT> AsyncResult<MAIN_RESULT> send(@NotNull RequestWithResponse paramRequestWithResponse, @NotNull PairConsumer<RESULT, AsyncResult<MAIN_RESULT>> paramPairConsumer);
}


/* Location:           E:\idea\
 * Qualified Name:     org.jetbrains.rpc.CommandSender
 * JD-Core Version:    0.7.0.1
 */